home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-9.10-netbook-remix-PL.iso / casper / filesystem.squashfs / usr / include / linux / xfrm.h < prev   
C/C++ Source or Header  |  2009-10-16  |  10KB  |  484 lines

  1. #ifndef _LINUX_XFRM_H
  2. #define _LINUX_XFRM_H
  3.  
  4. #include <linux/types.h>
  5.  
  6. /* All of the structures in this file may not change size as they are
  7.  * passed into the kernel from userspace via netlink sockets.
  8.  */
  9.  
  10. /* Structure to encapsulate addresses. I do not want to use
  11.  * "standard" structure. My apologies.
  12.  */
  13. typedef union
  14. {
  15.     __be32        a4;
  16.     __be32        a6[4];
  17. } xfrm_address_t;
  18.  
  19. /* Ident of a specific xfrm_state. It is used on input to lookup
  20.  * the state by (spi,daddr,ah/esp) or to store information about
  21.  * spi, protocol and tunnel address on output.
  22.  */
  23. struct xfrm_id
  24. {
  25.     xfrm_address_t    daddr;
  26.     __be32        spi;
  27.     __u8        proto;
  28. };
  29.  
  30. struct xfrm_sec_ctx {
  31.     __u8    ctx_doi;
  32.     __u8    ctx_alg;
  33.     __u16    ctx_len;
  34.     __u32    ctx_sid;
  35.     char    ctx_str[0];
  36. };
  37.  
  38. /* Security Context Domains of Interpretation */
  39. #define XFRM_SC_DOI_RESERVED 0
  40. #define XFRM_SC_DOI_LSM 1
  41.  
  42. /* Security Context Algorithms */
  43. #define XFRM_SC_ALG_RESERVED 0
  44. #define XFRM_SC_ALG_SELINUX 1
  45.  
  46. /* Selector, used as selector both on policy rules (SPD) and SAs. */
  47.  
  48. struct xfrm_selector
  49. {
  50.     xfrm_address_t    daddr;
  51.     xfrm_address_t    saddr;
  52.     __be16    dport;
  53.     __be16    dport_mask;
  54.     __be16    sport;
  55.     __be16    sport_mask;
  56.     __u16    family;
  57.     __u8    prefixlen_d;
  58.     __u8    prefixlen_s;
  59.     __u8    proto;
  60.     int    ifindex;
  61.     __kernel_uid32_t    user;
  62. };
  63.  
  64. #define XFRM_INF (~(__u64)0)
  65.  
  66. struct xfrm_lifetime_cfg
  67. {
  68.     __u64    soft_byte_limit;
  69.     __u64    hard_byte_limit;
  70.     __u64    soft_packet_limit;
  71.     __u64    hard_packet_limit;
  72.     __u64    soft_add_expires_seconds;
  73.     __u64    hard_add_expires_seconds;
  74.     __u64    soft_use_expires_seconds;
  75.     __u64    hard_use_expires_seconds;
  76. };
  77.  
  78. struct xfrm_lifetime_cur
  79. {
  80.     __u64    bytes;
  81.     __u64    packets;
  82.     __u64    add_time;
  83.     __u64    use_time;
  84. };
  85.  
  86. struct xfrm_replay_state
  87. {
  88.     __u32    oseq;
  89.     __u32    seq;
  90.     __u32    bitmap;
  91. };
  92.  
  93. struct xfrm_algo {
  94.     char        alg_name[64];
  95.     unsigned int    alg_key_len;    /* in bits */
  96.     char        alg_key[0];
  97. };
  98.  
  99. struct xfrm_algo_aead {
  100.     char        alg_name[64];
  101.     unsigned int    alg_key_len;    /* in bits */
  102.     unsigned int    alg_icv_len;    /* in bits */
  103.     char        alg_key[0];
  104. };
  105.  
  106. struct xfrm_stats {
  107.     __u32    replay_window;
  108.     __u32    replay;
  109.     __u32    integrity_failed;
  110. };
  111.  
  112. enum
  113. {
  114.     XFRM_POLICY_TYPE_MAIN    = 0,
  115.     XFRM_POLICY_TYPE_SUB    = 1,
  116.     XFRM_POLICY_TYPE_MAX    = 2,
  117.     XFRM_POLICY_TYPE_ANY    = 255
  118. };
  119.  
  120. enum
  121. {
  122.     XFRM_POLICY_IN    = 0,
  123.     XFRM_POLICY_OUT    = 1,
  124.     XFRM_POLICY_FWD    = 2,
  125.     XFRM_POLICY_MASK = 3,
  126.     XFRM_POLICY_MAX    = 3
  127. };
  128.  
  129. enum
  130. {
  131.     XFRM_SHARE_ANY,        /* No limitations */
  132.     XFRM_SHARE_SESSION,    /* For this session only */
  133.     XFRM_SHARE_USER,    /* For this user only */
  134.     XFRM_SHARE_UNIQUE    /* Use once */
  135. };
  136.  
  137. #define XFRM_MODE_TRANSPORT 0
  138. #define XFRM_MODE_TUNNEL 1
  139. #define XFRM_MODE_ROUTEOPTIMIZATION 2
  140. #define XFRM_MODE_IN_TRIGGER 3
  141. #define XFRM_MODE_BEET 4
  142. #define XFRM_MODE_MAX 5
  143.  
  144. /* Netlink configuration messages.  */
  145. enum {
  146.     XFRM_MSG_BASE = 0x10,
  147.  
  148.     XFRM_MSG_NEWSA = 0x10,
  149. #define XFRM_MSG_NEWSA XFRM_MSG_NEWSA
  150.     XFRM_MSG_DELSA,
  151. #define XFRM_MSG_DELSA XFRM_MSG_DELSA
  152.     XFRM_MSG_GETSA,
  153. #define XFRM_MSG_GETSA XFRM_MSG_GETSA
  154.  
  155.     XFRM_MSG_NEWPOLICY,
  156. #define XFRM_MSG_NEWPOLICY XFRM_MSG_NEWPOLICY
  157.     XFRM_MSG_DELPOLICY,
  158. #define XFRM_MSG_DELPOLICY XFRM_MSG_DELPOLICY
  159.     XFRM_MSG_GETPOLICY,
  160. #define XFRM_MSG_GETPOLICY XFRM_MSG_GETPOLICY
  161.  
  162.     XFRM_MSG_ALLOCSPI,
  163. #define XFRM_MSG_ALLOCSPI XFRM_MSG_ALLOCSPI
  164.     XFRM_MSG_ACQUIRE,
  165. #define XFRM_MSG_ACQUIRE XFRM_MSG_ACQUIRE
  166.     XFRM_MSG_EXPIRE,
  167. #define XFRM_MSG_EXPIRE XFRM_MSG_EXPIRE
  168.  
  169.     XFRM_MSG_UPDPOLICY,
  170. #define XFRM_MSG_UPDPOLICY XFRM_MSG_UPDPOLICY
  171.     XFRM_MSG_UPDSA,
  172. #define XFRM_MSG_UPDSA XFRM_MSG_UPDSA
  173.  
  174.     XFRM_MSG_POLEXPIRE,
  175. #define XFRM_MSG_POLEXPIRE XFRM_MSG_POLEXPIRE
  176.  
  177.     XFRM_MSG_FLUSHSA,
  178. #define XFRM_MSG_FLUSHSA XFRM_MSG_FLUSHSA
  179.     XFRM_MSG_FLUSHPOLICY,
  180. #define XFRM_MSG_FLUSHPOLICY XFRM_MSG_FLUSHPOLICY
  181.  
  182.     XFRM_MSG_NEWAE,
  183. #define XFRM_MSG_NEWAE XFRM_MSG_NEWAE
  184.     XFRM_MSG_GETAE,
  185. #define XFRM_MSG_GETAE XFRM_MSG_GETAE
  186.  
  187.     XFRM_MSG_REPORT,
  188. #define XFRM_MSG_REPORT XFRM_MSG_REPORT
  189.  
  190.     XFRM_MSG_MIGRATE,
  191. #define XFRM_MSG_MIGRATE XFRM_MSG_MIGRATE
  192.  
  193.     XFRM_MSG_NEWSADINFO,
  194. #define XFRM_MSG_NEWSADINFO XFRM_MSG_NEWSADINFO
  195.     XFRM_MSG_GETSADINFO,
  196. #define XFRM_MSG_GETSADINFO XFRM_MSG_GETSADINFO
  197.  
  198.     XFRM_MSG_NEWSPDINFO,
  199. #define XFRM_MSG_NEWSPDINFO XFRM_MSG_NEWSPDINFO
  200.     XFRM_MSG_GETSPDINFO,
  201. #define XFRM_MSG_GETSPDINFO XFRM_MSG_GETSPDINFO
  202.  
  203.     XFRM_MSG_MAPPING,
  204. #define XFRM_MSG_MAPPING XFRM_MSG_MAPPING
  205.     __XFRM_MSG_MAX
  206. };
  207. #define XFRM_MSG_MAX (__XFRM_MSG_MAX - 1)
  208.  
  209. #define XFRM_NR_MSGTYPES (XFRM_MSG_MAX + 1 - XFRM_MSG_BASE)
  210.  
  211. /*
  212.  * Generic LSM security context for comunicating to user space
  213.  * NOTE: Same format as sadb_x_sec_ctx
  214.  */
  215. struct xfrm_user_sec_ctx {
  216.     __u16            len;
  217.     __u16            exttype;
  218.     __u8            ctx_alg;  /* LSMs: e.g., selinux == 1 */
  219.     __u8            ctx_doi;
  220.     __u16            ctx_len;
  221. };
  222.  
  223. struct xfrm_user_tmpl {
  224.     struct xfrm_id        id;
  225.     __u16            family;
  226.     xfrm_address_t        saddr;
  227.     __u32            reqid;
  228.     __u8            mode;
  229.     __u8            share;
  230.     __u8            optional;
  231.     __u32            aalgos;
  232.     __u32            ealgos;
  233.     __u32            calgos;
  234. };
  235.  
  236. struct xfrm_encap_tmpl {
  237.     __u16        encap_type;
  238.     __be16        encap_sport;
  239.     __be16        encap_dport;
  240.     xfrm_address_t    encap_oa;
  241. };
  242.  
  243. /* AEVENT flags  */
  244. enum xfrm_ae_ftype_t {
  245.     XFRM_AE_UNSPEC,
  246.     XFRM_AE_RTHR=1,    /* replay threshold*/
  247.     XFRM_AE_RVAL=2, /* replay value */
  248.     XFRM_AE_LVAL=4, /* lifetime value */
  249.     XFRM_AE_ETHR=8, /* expiry timer threshold */
  250.     XFRM_AE_CR=16, /* Event cause is replay update */
  251.     XFRM_AE_CE=32, /* Event cause is timer expiry */
  252.     XFRM_AE_CU=64, /* Event cause is policy update */
  253.     __XFRM_AE_MAX
  254.  
  255. #define XFRM_AE_MAX (__XFRM_AE_MAX - 1)
  256. };
  257.  
  258. struct xfrm_userpolicy_type {
  259.     __u8        type;
  260.     __u16        reserved1;
  261.     __u8        reserved2;
  262. };
  263.  
  264. /* Netlink message attributes.  */
  265. enum xfrm_attr_type_t {
  266.     XFRMA_UNSPEC,
  267.     XFRMA_ALG_AUTH,        /* struct xfrm_algo */
  268.     XFRMA_ALG_CRYPT,    /* struct xfrm_algo */
  269.     XFRMA_ALG_COMP,        /* struct xfrm_algo */
  270.     XFRMA_ENCAP,        /* struct xfrm_algo + struct xfrm_encap_tmpl */
  271.     XFRMA_TMPL,        /* 1 or more struct xfrm_user_tmpl */
  272.     XFRMA_SA,
  273.     XFRMA_POLICY,
  274.     XFRMA_SEC_CTX,        /* struct xfrm_sec_ctx */
  275.     XFRMA_LTIME_VAL,
  276.     XFRMA_REPLAY_VAL,
  277.     XFRMA_REPLAY_THRESH,
  278.     XFRMA_ETIMER_THRESH,
  279.     XFRMA_SRCADDR,        /* xfrm_address_t */
  280.     XFRMA_COADDR,        /* xfrm_address_t */
  281.     XFRMA_LASTUSED,
  282.     XFRMA_POLICY_TYPE,    /* struct xfrm_userpolicy_type */
  283.     XFRMA_MIGRATE,
  284.     XFRMA_ALG_AEAD,        /* struct xfrm_algo_aead */
  285.     XFRMA_KMADDRESS,        /* struct xfrm_user_kmaddress */
  286.     __XFRMA_MAX
  287.  
  288. #define XFRMA_MAX (__XFRMA_MAX - 1)
  289. };
  290.  
  291. enum xfrm_sadattr_type_t {
  292.     XFRMA_SAD_UNSPEC,
  293.     XFRMA_SAD_CNT,
  294.     XFRMA_SAD_HINFO,
  295.     __XFRMA_SAD_MAX
  296.  
  297. #define XFRMA_SAD_MAX (__XFRMA_SAD_MAX - 1)
  298. };
  299.  
  300. struct xfrmu_sadhinfo {
  301.     __u32 sadhcnt; /* current hash bkts */
  302.     __u32 sadhmcnt; /* max allowed hash bkts */
  303. };
  304.  
  305. enum xfrm_spdattr_type_t {
  306.     XFRMA_SPD_UNSPEC,
  307.     XFRMA_SPD_INFO,
  308.     XFRMA_SPD_HINFO,
  309.     __XFRMA_SPD_MAX
  310.  
  311. #define XFRMA_SPD_MAX (__XFRMA_SPD_MAX - 1)
  312. };
  313.  
  314. struct xfrmu_spdinfo {
  315.     __u32 incnt;
  316.     __u32 outcnt;
  317.     __u32 fwdcnt;
  318.     __u32 inscnt;
  319.     __u32 outscnt;
  320.     __u32 fwdscnt;
  321. };
  322.  
  323. struct xfrmu_spdhinfo {
  324.     __u32 spdhcnt;
  325.     __u32 spdhmcnt;
  326. };
  327.  
  328. struct xfrm_usersa_info {
  329.     struct xfrm_selector        sel;
  330.     struct xfrm_id            id;
  331.     xfrm_address_t            saddr;
  332.     struct xfrm_lifetime_cfg    lft;
  333.     struct xfrm_lifetime_cur    curlft;
  334.     struct xfrm_stats        stats;
  335.     __u32                seq;
  336.     __u32                reqid;
  337.     __u16                family;
  338.     __u8                mode;        /* XFRM_MODE_xxx */
  339.     __u8                replay_window;
  340.     __u8                flags;
  341. #define XFRM_STATE_NOECN    1
  342. #define XFRM_STATE_DECAP_DSCP    2
  343. #define XFRM_STATE_NOPMTUDISC    4
  344. #define XFRM_STATE_WILDRECV    8
  345. #define XFRM_STATE_ICMP        16
  346. #define XFRM_STATE_AF_UNSPEC    32
  347. };
  348.  
  349. struct xfrm_usersa_id {
  350.     xfrm_address_t            daddr;
  351.     __be32                spi;
  352.     __u16                family;
  353.     __u8                proto;
  354. };
  355.  
  356. struct xfrm_aevent_id {
  357.     struct xfrm_usersa_id        sa_id;
  358.     xfrm_address_t            saddr;
  359.     __u32                flags;
  360.     __u32                reqid;
  361. };
  362.  
  363. struct xfrm_userspi_info {
  364.     struct xfrm_usersa_info        info;
  365.     __u32                min;
  366.     __u32                max;
  367. };
  368.  
  369. struct xfrm_userpolicy_info {
  370.     struct xfrm_selector        sel;
  371.     struct xfrm_lifetime_cfg    lft;
  372.     struct xfrm_lifetime_cur    curlft;
  373.     __u32                priority;
  374.     __u32                index;
  375.     __u8                dir;
  376.     __u8                action;
  377. #define XFRM_POLICY_ALLOW    0
  378. #define XFRM_POLICY_BLOCK    1
  379.     __u8                flags;
  380. #define XFRM_POLICY_LOCALOK    1    /* Allow user to override global policy */
  381.     /* Automatically expand selector to include matching ICMP payloads. */
  382. #define XFRM_POLICY_ICMP    2
  383.     __u8                share;
  384. };
  385.  
  386. struct xfrm_userpolicy_id {
  387.     struct xfrm_selector        sel;
  388.     __u32                index;
  389.     __u8                dir;
  390. };
  391.  
  392. struct xfrm_user_acquire {
  393.     struct xfrm_id            id;
  394.     xfrm_address_t            saddr;
  395.     struct xfrm_selector        sel;
  396.     struct xfrm_userpolicy_info    policy;
  397.     __u32                aalgos;
  398.     __u32                ealgos;
  399.     __u32                calgos;
  400.     __u32                seq;
  401. };
  402.  
  403. struct xfrm_user_expire {
  404.     struct xfrm_usersa_info        state;
  405.     __u8                hard;
  406. };
  407.  
  408. struct xfrm_user_polexpire {
  409.     struct xfrm_userpolicy_info    pol;
  410.     __u8                hard;
  411. };
  412.  
  413. struct xfrm_usersa_flush {
  414.     __u8                proto;
  415. };
  416.  
  417. struct xfrm_user_report {
  418.     __u8                proto;
  419.     struct xfrm_selector        sel;
  420. };
  421.  
  422. /* Used by MIGRATE to pass addresses IKE should use to perform
  423.  * SA negotiation with the peer */
  424. struct xfrm_user_kmaddress {
  425.     xfrm_address_t                  local;
  426.     xfrm_address_t                  remote;
  427.     __u32                reserved;
  428.     __u16                family;
  429. };
  430.  
  431. struct xfrm_user_migrate {
  432.     xfrm_address_t            old_daddr;
  433.     xfrm_address_t            old_saddr;
  434.     xfrm_address_t            new_daddr;
  435.     xfrm_address_t            new_saddr;
  436.     __u8                proto;
  437.     __u8                mode;
  438.     __u16                reserved;
  439.     __u32                reqid;
  440.     __u16                old_family;
  441.     __u16                new_family;
  442. };
  443.  
  444. struct xfrm_user_mapping {
  445.     struct xfrm_usersa_id        id;
  446.     __u32                reqid;
  447.     xfrm_address_t            old_saddr;
  448.     xfrm_address_t            new_saddr;
  449.     __be16                old_sport;
  450.     __be16                new_sport;
  451. };
  452.  
  453. /* backwards compatibility for userspace */
  454. #define XFRMGRP_ACQUIRE        1
  455. #define XFRMGRP_EXPIRE        2
  456. #define XFRMGRP_SA        4
  457. #define XFRMGRP_POLICY        8
  458. #define XFRMGRP_REPORT        0x20
  459.  
  460. enum xfrm_nlgroups {
  461.     XFRMNLGRP_NONE,
  462. #define XFRMNLGRP_NONE        XFRMNLGRP_NONE
  463.     XFRMNLGRP_ACQUIRE,
  464. #define XFRMNLGRP_ACQUIRE    XFRMNLGRP_ACQUIRE
  465.     XFRMNLGRP_EXPIRE,
  466. #define XFRMNLGRP_EXPIRE    XFRMNLGRP_EXPIRE
  467.     XFRMNLGRP_SA,
  468. #define XFRMNLGRP_SA        XFRMNLGRP_SA
  469.     XFRMNLGRP_POLICY,
  470. #define XFRMNLGRP_POLICY    XFRMNLGRP_POLICY
  471.     XFRMNLGRP_AEVENTS,
  472. #define XFRMNLGRP_AEVENTS    XFRMNLGRP_AEVENTS
  473.     XFRMNLGRP_REPORT,
  474. #define XFRMNLGRP_REPORT    XFRMNLGRP_REPORT
  475.     XFRMNLGRP_MIGRATE,
  476. #define XFRMNLGRP_MIGRATE    XFRMNLGRP_MIGRATE
  477.     XFRMNLGRP_MAPPING,
  478. #define XFRMNLGRP_MAPPING    XFRMNLGRP_MAPPING
  479.     __XFRMNLGRP_MAX
  480. };
  481. #define XFRMNLGRP_MAX    (__XFRMNLGRP_MAX - 1)
  482.  
  483. #endif /* _LINUX_XFRM_H */
  484.